From: Timm Bäder Date: Tue, 17 Dec 2019 12:06:02 +0000 (+0100) Subject: gl renderer: Avoid an invalid read X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1~1^2~321^2^2~424 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=73f2167fe46284c42a3975e8477138dd927161cc;p=gtk4.git gl renderer: Avoid an invalid read We need to copy the color here, since the program state can live across frame boundaries. --- diff --git a/gsk/gl/gskglrenderops.c b/gsk/gl/gskglrenderops.c index c2df2f6b4c..27b7bb48ac 100644 --- a/gsk/gl/gskglrenderops.c +++ b/gsk/gl/gskglrenderops.c @@ -617,11 +617,10 @@ ops_set_color (RenderOpBuilder *builder, ProgramState *current_program_state = get_current_program_state (builder); OpColor *op; - if (current_program_state->color && - gdk_rgba_equal (color, current_program_state->color)) + if (gdk_rgba_equal (color, ¤t_program_state->color)) return; - current_program_state->color = color; + current_program_state->color = *color; op = ops_begin (builder, OP_CHANGE_COLOR); op->rgba = color; @@ -696,14 +695,13 @@ ops_set_border_color (RenderOpBuilder *builder, ProgramState *current_program_state = get_current_program_state (builder); OpBorder *op; - if (current_program_state->border.color && - gdk_rgba_equal (color, current_program_state->border.color)) + if (gdk_rgba_equal (color, ¤t_program_state->border.color)) return; op = op_buffer_add (&builder->render_ops, OP_CHANGE_BORDER_COLOR); op->color = color; - current_program_state->border.color = color; + current_program_state->border.color = *color; } void diff --git a/gsk/gl/gskglrenderopsprivate.h b/gsk/gl/gskglrenderopsprivate.h index 81c567e831..216a457042 100644 --- a/gsk/gl/gskglrenderopsprivate.h +++ b/gsk/gl/gskglrenderopsprivate.h @@ -112,14 +112,14 @@ typedef struct float opacity; /* Per-program state */ union { - const GdkRGBA *color; + GdkRGBA color; struct { graphene_matrix_t matrix; graphene_vec4_t offset; } color_matrix; struct { float widths[4]; - const GdkRGBA *color; + GdkRGBA color; GskRoundedRect outline; } border; };